<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // 需求: 遍历数组 执行特定的操作

  // 遍历数组,每次循环的过程中,打印循环当前的元素,下标和原数组
  // var arr = [2, 8, 4, 6, 5, 7, 9, 3, 1];
  // function fn(item, index, array) {  //形式参数  接收实际参数
  //   console.log(item, index, array);
  // }

  // for (var i = 0; i < arr.length; i++) {
  //   var item = arr[i]; // 循环当前的元素
  //   var index = i;  // 循环当前的下标
  //   var array = arr; // 原数组
  //   fn(item, index, array); // 函数调用时传入的实际参数
  // }

  // 封装成函数  遍历数组  循环打印当前的元素,下标和原数组
  // 缺点:遍历的数组和执行和函数是定死的  => 不灵活
  // function myEach() {
  //   var arr = [2, 8, 4, 6, 5, 7, 9, 3, 1];
  //   function fn(item, index, array) {  //形式参数  接收实际参数
  //     console.log(item, index, array);
  //   }

  //   for (var i = 0; i < arr.length; i++) {
  //     var item = arr[i]; // 循环当前的元素
  //     var index = i;  // 循环当前的下标
  //     var array = arr; // 原数组
  //     fn(item, index, array); // 函数调用时传入的实际参数
  //   }
  // }

  // myEach();


  // 封装一个函数,遍历数组,每次循环执行传入的回调函数
  // 3. 优化_提形参  arr,fn  
  // arr 需要遍历的数据
  // fn  回调函数(接收一个函数)  每次循环时执行的内容 
  function myEach(arr, fn) {  // arr,fn形参  接收传入的实际参数
    // var arr = [2, 8, 4, 6, 5, 7, 9, 3, 1];
    // var fn = function(item, index, array) {  //形式参数  接收实际参数
    //     console.log(item, index, array);
    // }

    for (var i = 0; i < arr.length; i++) {
      var item = arr[i]; // 循环当前的元素
      var index = i;  // 循环当前的下标
      var array = arr; // 原数组
      fn(item, index, array); // 函数调用时传入的实际参数
    }
  }

  var brr = ["a", "b", "c"];
  myEach(brr, function (item, index, array) { //每次循环时向执行的内容
    // item   循环当前的元素
    // index   循环当前的下标
    // array   原数组
    console.log(item, index);
  });


  arr = [28, 56, 39, 44, 25]
  var sum = 0;
  myEach([28, 56, 39, 44, 25], function (item, index, array) {
    document.write(item + "<br>");
    sum += item;
  })
  document.write("sum:" + sum);



  var arr = [1, 2, 3, 4];

  // forEach
  var sum = 0;
  arr.forEach(function (item, key, arr) {
    // item   循环当前的元素
    // index   循环当前的下标
    // array   原数组
    console.log(item, key, arr);

    // console.log(key);

    // console.log(arr);
    sum += item;
  })
  console.log(sum);
</script>

</html>